package cn.dapeng.base;

import cn.dapeng.util.SleepingUtil;

import java.util.concurrent.TimeUnit;

/**
 * synchronized 代码块如果抛出异常，默认会是否锁
 *
 * 这个程序如果t1线程不抛出异常，t2线程永远没有运行的机会
 * 但是由于线程t1抛出了异常，导致t2线程才有运行的机会
 *
 * 这种情况会导致数据不一致性问题
 */
public class Sync_Exeception_T01 {

    public static int step = 0;

    public synchronized void m1() {
        while (true) {
            SleepingUtil.sleep(1, TimeUnit.SECONDS);
            step++;
            if (step == 5) {
                System.out.println(step % 0);
            }

            System.out.println(Thread.currentThread().getName() + ": " + step);
        }
    }

    public static void main(String[] args) {
        Sync_Exeception_T01 t = new Sync_Exeception_T01();
        Runnable r = () -> {
            t.m1();
        };

        Thread t1 = new Thread(r, "t1");
        t1.start();

        Thread t2 = new Thread(r, "t2");
        t2.start();
    }
}
